home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / emulator / uae-0.000 / uae-0 / uae-0.6.0 / X86.S < prev    next >
Text File  |  1996-06-17  |  14KB  |  880 lines

  1. /* These are optimized x86 assembly versions of pfield_linetoscr.
  2.  * Feel free to send me Sparc/PPC/Alpha versions of this... :)
  3.  */
  4.  
  5. #ifdef __DOS__
  6. #define SYM(NAME) _##NAME
  7. #define _color_regs _bpl_info
  8. #else
  9. #define SYM(NAME) NAME
  10. #endif
  11.  
  12. /* Urgl... */
  13. #define color_regs bpl_info
  14.  
  15. #ifndef __DOS__
  16.     .local    lastcolor
  17.     .comm    lastcolor,2
  18.     .align 16
  19. #else
  20.     .comm    lastcolor,2
  21.     .align 8
  22. #endif
  23. .globl pfield_linetoscr_full8
  24. pfield_linetoscr_full8:
  25.     pushl %ebp
  26.     pushl %edi
  27.     pushl %esi
  28.     pushl %ebx
  29.     movl 20(%esp),%esi
  30.     movl 24(%esp),%edi
  31.     
  32.     xorl %edx,%edx
  33.     movl SYM(diwfirstword),%eax
  34.     cmpl $4,%eax
  35.     jc .Loops1
  36.     movl %edx,SYM(pixdata)-4(%eax)
  37.     movl %edx,SYM(spixstate)-4(%eax)
  38. .Loops1:    
  39.     movl SYM(diwlastword),%eax
  40.     movl %edx,SYM(pixdata)(%eax)
  41.     movl %edx,SYM(spixstate)(%eax)
  42.     
  43.     movl SYM(acolors),%edx
  44.     movb %dl,%dh
  45.     movw %dx,%ax
  46.     bswapl %eax
  47.     movw %dx,%ax
  48.     
  49.     movl SYM(xlinebuffer),%ecx
  50.     jmp .L71
  51. .L8:
  52.     cmpl 24(%esp),%esi
  53.     jge .L5
  54.     movl %eax,(%ecx)
  55.     addl $4,%ecx
  56.     movl %edx,%esi
  57. .L71:
  58.     leal 4(%esi),%edx
  59.     cmpl %edx,SYM(diwfirstword)
  60.     jg .L8
  61. .L5:
  62.         movl %ecx,SYM(xlinebuffer)
  63.  
  64.         cmpl $0,SYM(bplham)
  65.     je .L9
  66.     cmpl $6,SYM(bplplanecnt)
  67.     jne .L9
  68.     
  69.     /* HAM */
  70.     /* This is invalid in pfield_linetoscr, but it's OK here */
  71.     movw SYM(color_regs),%ax
  72.     movw %ax,lastcolor
  73. .L73:
  74.     cmpl %esi,SYM(diwlastword)
  75.     jle .L27
  76.     cmpl 24(%esp),%esi
  77.     jge .L27
  78.     movzbl SYM(pixdata)(%esi),%eax
  79.     movl %eax,%edx
  80.     andl $48,%edx
  81.     cmpl $16,%edx
  82.     je .L16
  83.     jg .L21
  84.     testl %edx,%edx
  85.     je .L15
  86.     jmp .L14
  87. .L21:
  88.     cmpl $32,%edx
  89.     je .L17
  90.     cmpl $48,%edx
  91.     je .L18
  92.     jmp .L14
  93. .L15:
  94.     movw SYM(color_regs)(,%eax,2),%ax
  95.     movw %ax,lastcolor
  96.     jmp .L14
  97. .L16:
  98.     movw lastcolor,%dx
  99.     andw $4080,%dx
  100.     andw $15,%ax
  101.     jmp .L72
  102. .L17:
  103.     movzbw lastcolor,%dx
  104.     andw $15,%ax
  105.     salw $8,%ax
  106.     jmp .L72
  107. .L18:
  108.     movw lastcolor,%dx
  109.     andw $3855,%dx
  110.     andw $15,%ax
  111.     salw $4,%ax
  112. .L72:
  113.     orw %ax,%dx
  114.     movw %dx,lastcolor
  115. .L14:
  116.     cmpb $0,SYM(spixstate)(%esi)
  117.     je .L22
  118.     movsbl SYM(spixels)(%esi),%eax
  119.     movl SYM(acolors)+64(,%eax,4),%edx
  120.     movl SYM(xlinebuffer),%eax
  121.     movb %dl,(%eax)
  122.     incl SYM(xlinebuffer)
  123.     movb $0,SYM(spixstate)(%esi)
  124.     movb $0,SYM(spixels)(%esi)
  125.     jmp .L24
  126. .L22:
  127.     movzwl lastcolor,%eax
  128.     movl SYM(xcolors)(,%eax,4),%edx
  129.     movl SYM(xlinebuffer),%eax
  130.     movb %dl,(%eax)
  131.     incl SYM(xlinebuffer)
  132. .L24:
  133.     incl %esi
  134.     jmp .L73
  135. .L9:
  136.     cmpl $0,SYM(bpldualpf)
  137.     je .L74
  138.     
  139.     /* Dual Playfield */
  140.     
  141.     movl $SYM(dblpf_ind1),%ebp
  142.     movl $SYM(dblpf_2nd1),%edi
  143.     cmpl $0,SYM(bpldualpfpri)
  144.     je .L29
  145.     movl $SYM(dblpf_ind2),%ebp
  146.     movl $SYM(dblpf_2nd2),%edi
  147. .L29:
  148.     cmpl %esi,SYM(diwlastword)
  149.     jle .L27
  150.     
  151.     cmpl 24(%esp),%esi
  152.     jge .L27
  153.  
  154.     xorl %edx,%edx
  155.     movl SYM(pixdata)(%esi),%eax
  156.     movl SYM(spixstate)(%esi),%ebx
  157.     testl %ebx,%ebx
  158.     jne .L101
  159.     
  160.     /* no sprites */
  161.  
  162.     movb %al,%dl
  163.     movb (%ebp,%edx,4),%dl
  164.     movb SYM(acolors)(,%edx,4),%cl
  165.     movb %ah,%dl
  166.     movb (%ebp,%edx,4),%dl
  167.     movb SYM(acolors)(,%edx,4),%ch
  168.     bswapl %eax
  169.     bswapl %ecx
  170.     movb %al,%dl
  171.     movb (%ebp,%edx,4),%dl
  172.     movb SYM(acolors)(,%edx,4),%cl
  173.     movb %ah,%dl
  174.     movb (%ebp,%edx,4),%dl
  175.     movb SYM(acolors)(,%edx,4),%ch
  176.     bswapl %ecx
  177.     
  178.     movl SYM(xlinebuffer),%eax
  179.     movl %ecx,(%eax)
  180.     addl $4,SYM(xlinebuffer)
  181.     addl $4,%esi
  182.     jmp .L29
  183.     
  184. .L101:
  185.  
  186.         /* dual playfield with sprites */
  187.  
  188.     testb %bl,%bl
  189.     je .La3
  190.     movb %al,%dl
  191.     movl (%edi,%edx,4),%edx
  192.     testl %edx,%edx
  193.     je .La2
  194.     pushl %ebp
  195.     movl %edx,%ebp
  196.     movb %bl,%dl
  197.     cmpl plfpri(,%ebp,4),%edx
  198.     popl %ebp
  199.     jge .La3
  200. .La2:
  201.     movb SYM(spixels)(%esi),%dl
  202.     movb SYM(acolors)+64(,%edx,4),%cl
  203.     jmp .La1
  204. .La3:
  205.     movb %al,%dl
  206.     movb (%ebp,%edx,4),%dl
  207.     movb SYM(acolors)(,%edx,4),%cl
  208. .La1:
  209.  
  210.     testb %bh,%bh
  211.     je .La6
  212.     movb %ah,%dl
  213.     movl (%edi,%edx,4),%edx
  214.     testl %edx,%edx
  215.     je .La5
  216.     pushl %ebp
  217.     movl %edx,%ebp
  218.     movb %bh,%dl
  219.     cmpl plfpri(,%ebp,4),%edx
  220.     popl %ebp
  221.     jge .La6
  222. .La5:
  223.     movb SYM(spixels)+1(%esi),%dl
  224.     movb SYM(acolors)+64(,%edx,4),%ch
  225.     jmp .La4
  226. .La6:
  227.     movb %ah,%dl
  228.     movb (%ebp,%edx,4),%dl
  229.     movb SYM(acolors)(,%edx,4),%ch
  230. .La4:
  231.     bswapl %ecx    
  232.     bswapl %eax
  233.     bswapl %ebx
  234.     
  235.     testb %bl,%bl
  236.     je .La9
  237.     movb %al,%dl
  238.     movl (%edi,%edx,4),%edx
  239.     testl %edx,%edx
  240.     je .La8
  241.     pushl %ebp
  242.     movl %edx,%ebp
  243.     movb %bl,%dl
  244.     cmpl plfpri(,%ebp,4),%edx
  245.     popl %ebp
  246.     jge .La9
  247. .La8:
  248.     movb SYM(spixels)+3(%esi),%dl
  249.     movb SYM(acolors)+64(,%edx,4),%cl
  250.     jmp .La7
  251. .La9:
  252.     movb %al,%dl
  253.     movb (%ebp,%edx,4),%dl
  254.     movb SYM(acolors)(,%edx,4),%cl
  255. .La7:
  256.  
  257.     testb %bh,%bh
  258.     je .La12
  259.     movb %ah,%dl
  260.     movl (%edi,%edx,4),%edx
  261.     testl %edx,%edx
  262.     je .La11
  263.     pushl %ebp
  264.     movl %edx,%ebp
  265.     movb %bh,%dl
  266.     cmpl plfpri(,%ebp,4),%edx
  267.     popl %ebp
  268.     jge .La12
  269. .La11:
  270.     movb SYM(spixels)+2(%esi),%dl
  271.     movb SYM(acolors)+64(,%edx,4),%ch
  272.     jmp .La10
  273. .La12:
  274.     movb %ah,%dl
  275.     movb (%ebp,%edx,4),%dl
  276.     movb SYM(acolors)(,%edx,4),%ch
  277. .La10:
  278.         movl $0,SYM(spixstate)(%esi)
  279.         movl $0,SYM(spixels)(%esi)
  280.     addl $4,%esi
  281.     
  282.     bswapl %ecx
  283.  
  284.     movl SYM(xlinebuffer),%eax
  285.     movl %ecx,(%eax)
  286.     addl $4,SYM(xlinebuffer)
  287.     
  288.     jmp .L29
  289.     
  290.     /* normal case */
  291.     
  292. .L65:
  293.     cmpl 24(%esp),%esi
  294.     jge .L27
  295.     
  296.     xorl %edx,%edx
  297.     movl SYM(pixdata)(%esi),%eax
  298.     movl SYM(spixstate)(%esi),%ebx
  299.     testl %ebx,%ebx
  300.     jne .L100
  301.     
  302.     /* no sprites */
  303.     
  304.     movb %al,%dl
  305.     movb SYM(acolors)(,%edx,4),%cl
  306.     movb %ah,%dl
  307.     movb SYM(acolors)(,%edx,4),%ch
  308.     bswapl %eax
  309.     bswapl %ecx
  310.     movb %al,%dl
  311.     movb SYM(acolors)(,%edx,4),%cl
  312.     movb %ah,%dl
  313.     movb SYM(acolors)(,%edx,4),%ch
  314.     bswapl %ecx
  315.     
  316.     movl SYM(xlinebuffer),%eax
  317.     movl %ecx,(%eax)
  318.     addl $4,SYM(xlinebuffer)
  319.     addl $4,%esi
  320.     jmp .L74
  321.     
  322. .L100:
  323.         /* Here, we have to deal with sprites, too. */
  324.     
  325.     testb %bl,%bl
  326.     je .L46
  327.     testb %al,%al
  328.     je .L47
  329.     movb %bl,%dl
  330.     cmpl SYM(plfpri)+8,%edx
  331.     jge .L46
  332. .L47:
  333.     movb SYM(spixels)(%esi),%dl
  334.     movb SYM(acolors)+64(,%edx,4),%cl
  335.     jmp .L75
  336. .L46:
  337.     movb %al,%dl
  338.     movb SYM(acolors)(,%edx,4),%cl
  339. .L75:
  340.  
  341.     testb %bh,%bh
  342.     je .L51
  343.     testb %ah,%ah
  344.     je .L52
  345.     movb %bh,%dl
  346.     cmpl SYM(plfpri)+8,%edx
  347.     jge .L51
  348.     
  349. .L52:
  350.     movb SYM(spixels)+1(%esi),%dl
  351.     movb SYM(acolors)+64(,%edx,4),%ch
  352.     jmp .L76
  353. .L51:
  354.     movb %ah,%dl
  355.     movb SYM(acolors)(,%edx,4),%ch
  356. .L76:    
  357.     
  358.     bswapl %ebx
  359.     bswapl %ecx
  360.     bswapl %eax
  361.     
  362.     testb %bl,%bl
  363.     je .L56
  364.     testb %al,%al
  365.     je .L55
  366.     movb %bl,%dl    
  367.     cmpl SYM(plfpri)+8,%edx
  368.     jge .L56
  369. .L55:
  370.     movb SYM(spixels)+3(%esi),%dl
  371.     movb SYM(acolors)+64(,%edx,4),%cl
  372.     jmp .L57
  373. .L56:
  374.     movb %al,%dl
  375.     movb SYM(acolors)(,%edx,4),%cl
  376. .L57:
  377.  
  378.     testb %bh,%bh
  379.     je .L58
  380.     testb %ah,%ah
  381.     je .L59
  382.     movb %bh,%dl
  383.     cmpl SYM(plfpri)+8,%edx
  384.     jge .L58
  385. .L59:
  386.     movb SYM(spixels)+2(%esi),%dl
  387.     movb SYM(acolors)+64(,%edx,4),%ch
  388.     jmp .L60
  389. .L58:
  390.     movb %ah,%dl
  391.     movb SYM(acolors)(,%edx,4),%ch
  392. .L60:
  393.         movl $0,SYM(spixstate)(%esi)
  394.         movl $0,SYM(spixels)(%esi)
  395.     addl $4,%esi
  396.     
  397.     bswapl %ecx
  398.  
  399.     movl SYM(xlinebuffer),%eax
  400.     movl %ecx,(%eax)
  401.     addl $4,SYM(xlinebuffer)
  402. .L74:
  403.     cmpl %esi,SYM(diwlastword)
  404.     jg .L65
  405. .L27:
  406.  
  407.     /* Finish off the line */
  408.     
  409.     movl SYM(acolors),%edx
  410.     movb %dl,%dh
  411.     movw %dx,%ax
  412.     bswapl %eax
  413.     movw %dx,%ax
  414.     
  415.     movl SYM(xlinebuffer),%ecx
  416.     movl 24(%esp),%edi
  417. .L70:
  418.     cmpl %edi,%esi
  419.     jge .L66
  420.     
  421.     movl %eax,(%ecx)
  422.     addl $4,%ecx
  423.     addl $4,%esi
  424.     jmp  .L70
  425. .L66:
  426.         movl %ecx,SYM(xlinebuffer)
  427.     
  428.     popl %ebx
  429.     popl %esi
  430.     popl %edi
  431.     popl %ebp
  432.     ret
  433. .Lfe2:
  434.  
  435. #ifndef __DOS__
  436.     .align 16
  437. #else
  438.     .align 8
  439. #endif
  440. .globl pfield_linetoscr_full16
  441. pfield_linetoscr_full16:
  442.         pushl %edi
  443.     pushl %esi
  444.     pushl %ebx
  445.     pushl %ebp
  446.     
  447.     xorl %edx,%edx
  448.     movl SYM(diwfirstword),%eax
  449.     cmpl $4,%eax
  450.     jc .Loops2
  451.     movl %edx,SYM(pixdata)-4(%eax)
  452.     movl %edx,SYM(spixstate)-4(%eax)
  453. .Loops2:
  454.     movl SYM(diwlastword),%eax
  455.     movl %edx,SYM(pixdata)(%eax)
  456.     movl %edx,SYM(spixstate)(%eax)
  457.     
  458.     movl 20(%esp),%esi
  459.     
  460.     movw SYM(acolors),%ax
  461.     sall $16,%eax
  462.     movw SYM(acolors),%ax
  463.     
  464.     movl SYM(xlinebuffer),%ecx
  465.     jmp .L2443
  466. .L2447:
  467.     cmpl 24(%esp),%esi
  468.     jge .L2400
  469.     movl %eax,(%ecx)
  470.     movl %eax,4(%ecx)
  471.     addl $8,%ecx
  472.     movl %edx,%esi
  473. .L2443:
  474.     leal 4(%esi),%edx
  475.     cmpl %edx,SYM(diwfirstword)
  476.     jg .L2447
  477. .L2400:
  478.         movl %ecx,SYM(xlinebuffer)
  479.     
  480.     cmpl $0,SYM(bplham)
  481.     je .L2448
  482.     cmpl $6,SYM(bplplanecnt)
  483.     jne .L2448
  484.     
  485.     /* HAM */
  486.     
  487.     /* This is invalid in pfield_linetoscr, but it's OK here */
  488.     movw SYM(color_regs),%ax
  489.     movw %ax,lastcolor
  490. .L2499:
  491.     cmpl %esi,SYM(diwlastword)
  492.     jle .L2027
  493.     cmpl 24(%esp),%esi
  494.     jge .L2494
  495.     movzbl SYM(pixdata)(%esi),%eax
  496.     movl %eax,%edx
  497.     andl $48,%edx
  498.     cmpl $16,%edx
  499.     je .L2455
  500.     jg .L2460
  501.     testl %edx,%edx
  502.     je .L2454
  503.     jmp .L2453
  504. .L2460:
  505.     cmpl $32,%edx
  506.     je .L2456
  507.     cmpl $48,%edx
  508.     je .L2457
  509.     jmp .L2453
  510. .L2454:
  511.     movw SYM(color_regs)(,%eax,2),%ax
  512.     movw %ax,lastcolor
  513.     jmp .L2453
  514. .L2455:
  515.     movw lastcolor,%dx
  516.     andw $4080,%dx
  517.     andw $15,%ax
  518.     jmp .L2498
  519. .L2456:
  520.     movzbw lastcolor,%dx
  521.     andw $15,%ax
  522.     salw $8,%ax
  523.     jmp .L2498
  524. .L2457:
  525.     movw lastcolor,%dx
  526.     andw $3855,%dx
  527.     andw $15,%ax
  528.     salw $4,%ax
  529. .L2498:
  530.     orw %ax,%dx
  531.     movw %dx,lastcolor
  532. .L2453:
  533.     cmpb $0,SYM(spixstate)(%esi)
  534.     je .L2461
  535.     movsbl SYM(spixels)(%esi),%eax
  536.     movl SYM(acolors)+64(,%eax,4),%edx
  537.     movl SYM(xlinebuffer),%eax
  538.     movw %dx,(%eax)
  539.     addl $2,SYM(xlinebuffer)
  540.     movb $0,SYM(spixstate)(%esi)
  541.     movb $0,SYM(spixels)(%esi)
  542.     jmp .L2463
  543. .L2461:
  544.     movzwl lastcolor,%eax
  545.     movl SYM(xcolors)(,%eax,4),%edx
  546.     movl SYM(xlinebuffer),%eax
  547.     movw %dx,(%eax)
  548.     addl $2,SYM(xlinebuffer)
  549. .L2463:
  550.     incl %esi
  551.     jmp .L2499
  552. .L2448:
  553.         cmpl $0,SYM(bpldualpf)
  554.     je .L2500
  555.     
  556.     /* Dual Playfield */
  557.     
  558.     xorl %edx,%edx
  559.     
  560.     movl $SYM(dblpf_ind1),%ebp
  561.     movl $SYM(dblpf_2nd1),%edi
  562.     cmpl $0,SYM(bpldualpfpri)
  563.     je .L2468
  564.     movl $SYM(dblpf_ind2),%ebp
  565.     movl $SYM(dblpf_2nd2),%edi
  566. .L2468:
  567.     cmpl %esi,SYM(diwlastword)
  568.     jle .L2027
  569.     cmpl 24(%esp),%esi
  570.     jge .L2494
  571.     
  572.     movl SYM(pixdata)(%esi),%eax
  573.     movl SYM(spixstate)(%esi),%ebx
  574.     testl %ebx,%ebx
  575.     jne .Lb0
  576.     
  577.     /* Dual Playfield, no sprites */
  578.     
  579.     movl SYM(xlinebuffer),%ebx
  580.     
  581.     movb %ah,%dl
  582.     movb (%ebp,%edx,4),%dl
  583.     movw SYM(acolors)(,%edx,4),%cx
  584.     sall $16,%ecx
  585.     movb %al,%dl
  586.     movb (%ebp,%edx,4),%dl
  587.     movw SYM(acolors)(,%edx,4),%cx
  588.     movl %ecx,(%ebx)
  589.     
  590.     bswapl %eax
  591.     movb %al,%dl
  592.     movb (%ebp,%edx,4),%dl
  593.     movw SYM(acolors)(,%edx,4),%cx
  594.     sall $16,%ecx
  595.     movb %ah,%dl
  596.     movb (%ebp,%edx,4),%dl
  597.     movw SYM(acolors)(,%edx,4),%cx
  598.     movl %ecx,4(%ebx)
  599.     addl $8,SYM(xlinebuffer)
  600.     addl $4,%esi
  601.     jmp .L2468
  602.     
  603.     /* Dual Playfield with sprites */
  604.     
  605. .Lb0:        
  606.     testb %bh,%bh
  607.     je .Lb3
  608.     movb %ah,%dl
  609.     movl (%edi,%edx,4),%edx
  610.     testl %edx,%edx
  611.     je .Lb2
  612.     pushl %ebp
  613.     movl %edx,%ebp
  614.     movb %bh,%dl
  615.     cmpl plfpri(,%ebp,4),%edx
  616.     popl %ebp
  617.     jge .Lb3
  618. .Lb2:
  619.     movb SYM(spixels)+1(%esi),%dl
  620.     movw SYM(acolors)+64(,%edx,4),%cx
  621.     jmp .Lb1
  622. .Lb3:
  623.     movb %ah,%dl
  624.     movb (%ebp,%edx,4),%dl
  625.     movw SYM(acolors)(,%edx,4),%cx
  626. .Lb1:
  627.         sall $16,%ecx
  628.  
  629.     testb %bl,%bl
  630.     je .Lb6
  631.     movb %al,%dl
  632.     movl (%edi,%edx,4),%edx
  633.     testl %edx,%edx
  634.     je .Lb5
  635.     pushl %ebp
  636.     movl %edx,%ebp
  637.     movb %bl,%dl
  638.     cmpl plfpri(,%ebp,4),%edx
  639.     popl %ebp
  640.     jge .Lb6
  641. .Lb5:
  642.     movb SYM(spixels)(%esi),%dl
  643.     movw SYM(acolors)+64(,%edx,4),%cx
  644.     jmp .Lb4
  645. .Lb6:
  646.     movb %al,%dl
  647.     movb (%ebp,%edx,4),%dl
  648.     movw SYM(acolors)(,%edx,4),%cx
  649. .Lb4:
  650.     pushl %eax
  651.     movl SYM(xlinebuffer),%eax
  652.     movl %ecx,(%eax)
  653.     popl %eax
  654.     
  655.     bswapl %ebx
  656.     bswapl %eax
  657.     
  658.     testb %bl,%bl
  659.     je .Lb9
  660.     movb %al,%dl
  661.     movl (%edi,%edx,4),%edx
  662.     testl %edx,%edx
  663.     je .Lb8
  664.     pushl %ebp
  665.     movl %edx,%ebp
  666.     movb %bl,%dl
  667.     cmpl plfpri(,%ebp,4),%edx
  668.     popl %ebp
  669.     jge .Lb9
  670. .Lb8:
  671.     movb SYM(spixels)+3(%esi),%dl
  672.     movw SYM(acolors)+64(,%edx,4),%cx
  673.     jmp .Lb7
  674. .Lb9:
  675.     movb %al,%dl
  676.     movb (%ebp,%edx,4),%dl
  677.     movw SYM(acolors)(,%edx,4),%cx
  678. .Lb7:
  679.         sall $16,%ecx
  680.  
  681.     testb %bh,%bh
  682.     je .Lb12
  683.     movb %ah,%dl
  684.     movl (%edi,%edx,4),%edx
  685.     testl %edx,%edx
  686.     je .Lb11
  687.     pushl %ebp
  688.     movl %edx,%ebp
  689.     movb %bh,%dl
  690.     cmpl plfpri(,%ebp,4),%edx
  691.     popl %ebp
  692.     jge .Lb12
  693. .Lb11:
  694.     movb SYM(spixels)+2(%esi),%dl
  695.     movw SYM(acolors)+64(,%edx,4),%cx
  696.     jmp .Lb10
  697. .Lb12:
  698.     movb %ah,%dl
  699.     movb (%ebp,%edx,4),%dl
  700.     movw SYM(acolors)(,%edx,4),%cx
  701. .Lb10:
  702.         movl $0,SYM(spixstate)(%esi)
  703.         movl $0,SYM(spixels)(%esi)
  704.     addl $4,%esi
  705.     
  706.     movl SYM(xlinebuffer),%eax
  707.     movl %ecx,4(%eax)
  708.     addl $8,SYM(xlinebuffer)
  709.     
  710.     jmp .L2468
  711. #if 0
  712.     
  713.     movsbl SYM(spixels)(%esi),%eax
  714.     movl SYM(acolors)+64(,%eax,4),%edx
  715.     movl SYM(xlinebuffer),%eax
  716.     movw %dx,(%eax)
  717.     addl $2,SYM(xlinebuffer)
  718.     movb $0,SYM(spixstate)(%esi)
  719.     movb $0,SYM(spixels)(%esi)
  720.     jmp .L2476
  721. .L2474:
  722.     movzbl SYM(pixdata)(%esi),%eax
  723.     movl (%ebp,%eax,4),%eax
  724.     movl SYM(acolors)(,%eax,4),%edx
  725.     movl SYM(xlinebuffer),%eax
  726.     movw %dx,(%eax)
  727.     addl $2,SYM(xlinebuffer)
  728. .L2476:
  729.     incl %esi
  730.     jmp .L2468
  731. #endif
  732.  
  733.     /* Normal case */
  734. .L2492:
  735.     cmpl 24(%esp),%esi
  736.     jge .L2027
  737.     
  738.     xorl %edx,%edx
  739.     movl SYM(pixdata)(%esi),%eax
  740.     movl SYM(spixstate)(%esi),%ebx
  741.     testl %ebx,%ebx
  742.     jne .L20100
  743.     
  744.     /* no sprites */
  745.     
  746.     movl SYM(xlinebuffer),%ebp
  747.     
  748.     movb %ah,%dl
  749.     movw SYM(acolors)(,%edx,4),%cx
  750.     sall $16,%ecx
  751.     movb %al,%dl
  752.     movw SYM(acolors)(,%edx,4),%cx
  753.     movl %ecx,(%ebp)
  754.  
  755.         bswapl %eax
  756.     
  757.     movb %al,%dl
  758.     movw SYM(acolors)(,%edx,4),%cx
  759.     sall $16,%ecx
  760.     movb %ah,%dl
  761.     movw SYM(acolors)(,%edx,4),%cx
  762.     movl %ecx,4(%ebp)
  763.     
  764.     addl $8,%ebp
  765.     movl %ebp,SYM(xlinebuffer)
  766.     addl $4,%esi
  767.     jmp .L2500
  768.     
  769. .L20100:
  770.         /* Here, we have to deal with sprites, too. */
  771.     
  772.     movl SYM(xlinebuffer),%ebp
  773.  
  774.     testb %bh,%bh
  775.     je .L2051
  776.     testb %ah,%ah
  777.     je .L2052
  778.     movb %bh,%dl
  779.     cmpl SYM(plfpri)+8,%edx
  780.     jge .L2051
  781.     
  782. .L2052:
  783.     movb SYM(spixels)+1(%esi),%dl
  784.     movw SYM(acolors)+64(,%edx,4),%cx
  785.     jmp .L2076
  786. .L2051:
  787.     movb %ah,%dl
  788.     movw SYM(acolors)(,%edx,4),%cx
  789. .L2076:    
  790.         sall $16,%ecx
  791.     
  792.     testb %bl,%bl
  793.     je .L2046
  794.     testb %al,%al
  795.     je .L2047
  796.     movb %bl,%dl
  797.     cmpl SYM(plfpri)+8,%edx
  798.     jge .L2046
  799. .L2047:
  800.     movb SYM(spixels)(%esi),%dl
  801.     movw SYM(acolors)+64(,%edx,4),%cx
  802.     jmp .L2075
  803. .L2046:
  804.     movb %al,%dl
  805.     movw SYM(acolors)(,%edx,4),%cx
  806. .L2075:
  807.     
  808.     bswapl %ebx
  809.     bswapl %eax
  810.     movl %ecx,(%ebp)
  811.     
  812.     testb %bl,%bl
  813.     je .L2056
  814.     testb %al,%al
  815.     je .L2055
  816.     movb %bl,%dl
  817.     cmpl SYM(plfpri)+8,%edx
  818.     jge .L2056
  819. .L2055:
  820.     movb SYM(spixels)+3(%esi),%dl
  821.     movw SYM(acolors)+64(,%edx,4),%cx
  822.     jmp .L2057
  823. .L2056:
  824.     movb %al,%dl
  825.     movw SYM(acolors)(,%edx,4),%cx
  826. .L2057:
  827.         sall $16,%ecx
  828.  
  829.         testb %bh,%bh
  830.     je .L2058
  831.     testb %ah,%ah
  832.     je .L2059
  833.     movb %bh,%dl
  834.     cmpl SYM(plfpri)+8,%edx
  835.     jge .L2058
  836. .L2059:
  837.     movb SYM(spixels)+2(%esi),%dl
  838.     movw SYM(acolors)+64(,%edx,4),%cx
  839.     jmp .L2060
  840. .L2058:
  841.     movb %ah,%dl
  842.     movw SYM(acolors)(,%edx,4),%cx
  843. .L2060:
  844.  
  845.         movl %ecx,4(%ebp)
  846.         movl $0,SYM(spixstate)(%esi)
  847.         movl $0,SYM(spixels)(%esi)
  848.     addl $4,%esi
  849.  
  850.     addl $8,SYM(xlinebuffer)
  851. .L2500:
  852.     cmpl %esi,SYM(diwlastword)
  853.     jg .L2492
  854.     
  855.     /* Finish off the line */
  856.     
  857. .L2027:
  858.         movl 24(%esp),%edi
  859.     cmpl %edi,%esi
  860.     jnl .L2494
  861.     movl SYM(acolors),%edx
  862.     movl SYM(xlinebuffer),%eax
  863. .L2495:
  864.     incl %esi
  865.     movw %dx,(%eax)
  866.     addl $2,%eax
  867.  
  868.     cmpl %edi,%esi
  869.     jl .L2495
  870.     movl %eax,SYM(xlinebuffer)
  871. .L2494:
  872.         popl %ebp
  873.     popl %ebx
  874.     popl %esi
  875.     popl %edi
  876.     ret
  877. .Lfe21:
  878.  
  879.         .ident    "Crux CC 3.14.15"
  880.